package com.fz.us.admin.dict.service;

import com.fz.us.admin.base.bean.Result;
import com.fz.us.admin.base.service.BaseService;
import com.fz.us.admin.dict.dto.DictItemDto;
import com.fz.us.admin.dict.entity.Dict;
import com.fz.us.admin.dict.entity.DictItem;

import java.util.List;
import java.util.Map;

/**
 * Service接口 - 字典 item
 * ============================================================================
 * 版权所有 2016 。
 *
 * @author fallenpanda
 * @version 1.0 2016-07-21 。
 * ============================================================================
 */
public interface DictItemService extends BaseService<DictItem,String> {

    /**
     * 字典列表(系统级)
     *
     * @param dictId 系统字典Id
     * @return
     */
    public List<DictItem> listSystem(String dictId);

    /**
     * 字典列表(自定义级)
     *
     * @param dictId 系统字典Id
     * @param keyId keyId
     * @return
     */
    public List<DictItemDto> listDefault(String dictId, String keyId);

    /**
     * 字典列表(自定义级)(可选)
     *
     * @param dictId 系统字典Id
     * @param keyId keyId
     * @return
     */
    public List<DictItemDto> listSelectableDefined(String dictId, String keyId);

    /**
     * 查找字典对象
     *
     * @param dictId 系统字典Id
     * @param value key
     * @return
     */
    public DictItem getByValue(String dictId, String value);

    /**
     * 查找字典对象
     *
     * @param dictId 系统字典Id
     * @param keyId keyId
     * @param value key
     * @return
     */
    public DictItem getByValue(String dictId, String keyId, String value);

    /**
     * 关键 key 是否已存在
     *
     * @param dictId
     * @param value
     * @return
     */
    public boolean isExistValue(String dictId, String value);

    /**
     * 关键 key 是否已存在
     *
     * @param dictId
     * @param keyId
     * @param value
     * @return
     */
    public boolean isExistValue(String dictId, String keyId, String value);

    /**
     * 最大排序号
     *
     * @param dictId 系统字典Id
     * @param keyId keyId
     * @return
     */
    public int getMaxSortNo(String dictId, String keyId);

    /**
     * 企业自定义字典名称
     *
     * @param keyId
     * @param dictItemId 字典 item
     * @return
     */
    public String getDefinedName(String keyId, String dictItemId);

    /**
     * 添加系统默认字典
     *
     * @param dict
     * @param name
     * @param value
     * @param description
     * @param ifKey
     * @param ifSelectable
     * @param sortNo
     * @param parent
     * @return
     */
    public Result addDefault(Dict dict, String name, String value, String description, int ifKey, int ifSelectable, int sortNo, DictItem parent);

    /**
     * 添加自定义字典
     *
     * @param dict
     * @param keyId
     * @param name
     * @param value
     * @param description
     * @param parent
     * @return
     */
    public Result addDefined(Dict dict, String keyId, String name, String value, String description, DictItem parent);

    /**
     * 修改系统字典
     *
     * @param dictitemId
     * @param name
     * @param value
     * @param description
     * @param ifKey
     * @param ifSelectable
     * @param sortNo
     * @return
     */
    public Result editDefined(String dictitemId, String name, String value, String description, int ifKey, int ifSelectable, int sortNo);

    /**
     * 修改系统字典
     *
     * @param dictitemId
     * @param name
     * @param description
     * @return
     */
    public Result editDefined(String dictitemId, String name, String description);

    /**
     * 系统字典排序
     *
     * @param action
     * @param dictitemId
     * @param targetId
     * @return
     */
    public Result sort(String action, String dictitemId, String targetId, String[] ids);

    /**
     * 列表 Map
     *
     * @param dictItem
     * @return
     */
    public Map<String, Object> getListMap(DictItem dictItem);

    /**
     * 详情 Map
     *
     * @param dictItem
     * @return
     */
    public Map<String, Object> getDetailMap(DictItem dictItem);

    /**
     * 列表 Map
     *
     * @param dictItem
     * @return
     */
    public Map<String, Object> getListMap(DictItemDto dictItem);

    /**
     * 下拉 Map
     *
     * @param dictItem
     * @return
     */
    public Map<String, Object> getSelectMap(DictItemDto dictItem);

}
